package com.example.reserveseat.Utils;

import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SignatureUtil {

    public static String getHeaderSign(String r, Map<String, Object> a) {
        List<String> keys = new ArrayList<>(a.keySet());
        Collections.sort(keys);
        StringBuilder signatureBuilder = new StringBuilder();
        signatureBuilder.append("/").append(r).append("~");

        for (int i = 0; i < keys.size(); i++) {
            String key = keys.get(i);
            Object value = a.get(key);
            String valueStr = (value != null) ? value.toString() : "";
            if (valueStr.length() > 1000) {
                valueStr = valueStr.substring(0, 1000);
            }
            signatureBuilder.append(key).append("=").append(valueStr);
            if (i < keys.size() - 1) {
                signatureBuilder.append("&");
            }
        }

        String baseSignatureString = signatureBuilder.toString();
        baseSignatureString = baseSignatureString.toUpperCase();
        String salt = MDSalt.defaultMDSalt(); // 假设MDSalt是一个类，有一个静态方法defaultMDSalt返回盐值
        baseSignatureString += "~" + salt;

        return hashFunction(baseSignatureString).toUpperCase(); // 假设hashFunction是计算散列的方法
    }

    private static String hashFunction(String input) {
        // 这里应该是散列算法的实现，比如SHA-256
        // 由于Java中没有直接的等价于JavaScript的(0, n.default)的调用方式，
        // 我们需要使用Java的散列库或自定义实现。
        // 例如，使用Java 8的MessageDigest：
        try {
            MessageDigest digest = MessageDigest.getInstance("MD5");
            byte[] hash = digest.digest(input.getBytes("UTF-8"));
            StringBuilder hexString = new StringBuilder();
            for (byte b : hash) {
                String hex = Integer.toHexString(0xff & b);
                if (hex.length() == 1) hexString.append('0');
                hexString.append(hex);
            }
            return hexString.toString();
        } catch (Exception e) {
            throw new RuntimeException("Hash function error", e);
        }
    }

    // 假设MDSalt是一个类，这里是一个示例的静态方法
    public static class MDSalt {
        public static String defaultMDSalt() {
            // 返回默认的盐值
            return "c5341a87b71ae5";
        }
    }

    // 示例主方法，用于演示
    public static void main(String[] args) {
        Map<String, Object> params = new HashMap<>();
        // 填充params...
        params.put("instid",1570);
        params.put("template_type",3);

        String signature = getHeaderSign("https://study.nslib.cn/appapi/WXOpenTemplate/List", params);
        System.out.println("Signature: " + signature);
    }
}
